﻿using FrameworkCore.DI;
using iText.Kernel.Pdf;
using Aspose.Pdf;

namespace FrameworkCore.Helpers;

public class PdfHelper : ITransientDependency
{
    /// <summary>
    /// 将指定的 PDF 文件拆分为单页 PDF 文件，并将它们保存到指定目录。
    /// </summary>
    /// <param name="sourcePath">源 PDF 文件的路径。</param>
    /// <param name="outputDirectory">输出目录，用于保存拆分后的 PDF 文件。</param>
    /// <returns>包含所有生成的单页 PDF 文件名的列表。</returns>
    public List<string> SplitPdfIntoSinglePages(string sourcePath, string outputDirectory)
    {
        // 创建一个列表来存储生成的 PDF 文件名
        List<string> fileNames = new List<string>();

        if (!Directory.Exists(outputDirectory))
        {
            Directory.CreateDirectory(outputDirectory);
        }

        // 使用 PdfReader 读取源 PDF 文件
        using (PdfDocument pdfDoc = new PdfDocument(new PdfReader(sourcePath)))
        {
            // 获取源 PDF 文件的总页数
            int numberOfPages = pdfDoc.GetNumberOfPages();

            // 遍历每一页，进行拆分
            for (int i = 1; i <= numberOfPages; i++)
            {
                // 使用前导零格式化文件名，使其保持固定长度
                string outputPath = Path.Combine(outputDirectory, $"Page_{i:D3}.pdf");

                // 创建一个新的 PDF 文件，并使用 PdfWriter 写入数据
                using (PdfDocument newPdfDoc = new PdfDocument(new PdfWriter(outputPath)))
                {
                    // 将源 PDF 文件的第 i 页复制到新的 PDF 文件中
                    pdfDoc.CopyPagesTo(i, i, newPdfDoc);
                }

                // 将生成的 PDF 文件名添加到列表中
                fileNames.Add(Path.GetFileName(outputPath));
            }
        }

        // 返回包含所有生成的 PDF 文件名的列表
        return fileNames;
    }

    /// <summary>
    /// 将指定的 PDF 文件转换为 DOCX 文件，并保存到指定目录。
    /// </summary>
    /// <param name="pdfFilePath">源 PDF 文件的路径。</param>
    /// <param name="outputDirectory">保存 DOCX 文件的目录路径。</param>
    /// <param name="outputFileName">保存的 DOCX 文件名。</param>
    public void ConvertPdfToDocxFormat(string pdfFilePath, string outputDirectory, string outputFileName)
    {
        try
        {
            // 确保输出目录存在
            if (!Directory.Exists(outputDirectory))
            {
                Directory.CreateDirectory(outputDirectory);
            }

            // 创建 PDF 文档对象
            Document pdfDocument = new Document(pdfFilePath);

            // 创建 DOCX 保存选项
            DocSaveOptions saveOptions = new DocSaveOptions
            {
                Format = DocSaveOptions.DocFormat.DocX
            };

            // 构建输出文件的完整路径
            string outputPath = Path.Combine(outputDirectory, outputFileName);

            // 保存 PDF 文件为 DOCX 文件
            pdfDocument.Save(outputPath, saveOptions);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
            // Optional: log ex.StackTrace or other details for further debugging
        }
    }
}
